package main

import (
	"sync/atomic"
	"time"
	"fmt"
)

func main() {
	//使用无符号整数来表示（总是正数）计数器
	var opt uint64
	//为了模拟并发更新，将启动50个goutoutine，每次增加计数器一次毫秒。
	for i := 0; i < 50; i++ {
		go func() {
			for {
				atomic.AddUint64(&opt, 1)
				time.Sleep(time.Millisecond)
			}
		}()
	}
	//等待一秒钟以允许一些操作积累
	time.Sleep(time.Second)
	//为了安全地使用计数器，同时它还在被其他goroutine更新，将当前值的一个副本提取到opsFinal
	opsFinal := atomic.LoadUint64(&opt)

	fmt.Println("opt:", opsFinal)

}
